home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
ms_dos
/
tool
/
dprint
/
errtrap.c
< prev
next >
Wrap
Text File
|
1994-08-11
|
2KB
|
105 lines
/*
8086|Printman/POSTCARD エラー対策ルーチン
Copyright (c) 1993,94 Delmonta
*/
#include"dprint.h"
#include<conio.h>
#include<dos.h>
#include<signal.h>
/*---------------------------------------------------------------------------*/
enum PRNHERR prn_harderr(void)
{
prnherr_rep:
switch(dp_errmes("プリンタエラーです A:中止/R:再試行/I:無視して続行 "))
{
case 'A':
case 'a':
case 'F': /* 本来はAbortではなくFailなので、Fキーも受け付ける */
case 'f':
return PRNHERR_FAIL;
case 'R':
case 'r':
return PRNHERR_RETRY;
case 'I':
case 'i':
return PRNHERR_IGNORE;
default:
putchar('\7');
goto prnherr_rep;
}
}
/*---------------------------------------------------------------------------*/
static int far dp_dosharderr(deverr,errcode,devhdr)
unsigned deverr,errcode,far *devhdr;
{
static char *errname[13] =
{
"書き込み禁止です",
"存在しないユニットです",
"準備ができていません",
"デバイスの要求が違います",
"CRCエラーです",
"デバイスの要求パラメータが違います"
"シークエラーです",
"存在しないメディアタイプです",
"セクタが見つかりません",
"プリンタ用紙切れです",
"書き込みに失敗しました",
"読み込みに失敗しました",
"ディスクエラーです",
};
char c;
if (errcode > 12)
errcode = 12;
harderr_rep:
/* printf()は使えない */
cprintf("\033[%d;1f\033[33m\007%s A:中止/ R:再試行/I:無視して続行 ",
ERRMES_LINE,errname[errcode&0xff]);
c = dp_getch();
cprintf("\033[2K");
switch (c)
{
case 'A':
case 'a':
case 'F': /* 元々AbortではなくFailなので、Fキーも受け付ける */
case 'f':
return _HARDERR_FAIL;
case 'R':
case 'r':
return _HARDERR_RETRY;
case 'I':
case 'i':
return _HARDERR_IGNORE;
case EXTKEY_H:
dp_getch(); /* このままbreakせずに下に進む */
default:
putch('\7');
goto harderr_rep;
}
}
/*---------------------------------------------------------------------------*/
void dp_seterrhandler(void)
{
freopen("con","r",stdin); /* リダイレクトを抑止する */
freopen("con","w",stdout);
signal(SIGINT,SIG_IGN);
_harderr(dp_dosharderr);
}